package demo;
//多态：其实是一种思想，一个父类引用指向的对象不一样，调用重写的方法
//会表现出不同的行为
//向上转型（继承） 父类引用接收子类对象
//重写
//通过父类引用调用子类父类重写的同名的方法

//抽象类也可以实现多态
//
//abstract class Shape {
//    public abstract void draw();
//}
//class Heart extends Shape {
//
//    @Override
//    public void draw() {
//        System.out.println("画一个🧡");
//    }
//}
//
//class Flower extends Shape {
//
//    @Override
//    public void draw() {
//        System.out.println("画一朵❀");
//    }
//}
//class Cycle extends Shape {
//
//    @Override
//    public void draw() {
//        System.out.println("画一个⚪");
//    }
//}
//
//
//abstract class Animal {
//    public String name;
//    public int age;
//    public Animal(String name ,int age) {
//        this.name = name;
//        this.age = age;
//    }
//
//    public abstract void eat();
//}
//class Dog extends Animal{
//    public Dog(String name ,int age) {
//        super(name,age);
//        System.out.println("子类构造");
//    }
//
//    @Override
//    public void eat() {
//        System.out.println(name + "eat dog food");
//    }
//}
//

//子类从父类继承过来的成员也可以用this来引用，只要该变量在子类
//中没有同名变量，则此时用this访问到的就是父类的成员


//接口:更加抽象的抽象类，接口是规范。
public class Test {
    public static void drawMap(IShape iShape ) {
        iShape.draw();
    }

    public static void main(String[] args) {
        Flower flower = new Flower();
        drawMap(flower);
        IShape.staticFunc();
    }

    //接口：对标准或行为的规范，可以接收所有符合这个规范的类。
    //接口就是公告的行为标准规范，大家在实现时，只需要符合规范标准，就可以通用。在java当中，接口可以看成时多个类的公告规范，是一种引用数据类型
    //接口，对实现规范的类具有通用性----》通用性

    //接口的定义
    //接口的命名：一般以大写字母I开头，一般使用形容词
    //接口当中的方法和属性不要加任何修饰符，保持diamagnetic的简洁性


}
//1--使用关键字interface来定义接口
//2--接口不能被实例化
//3--一个java文件可以是一个类，也可以是接口
//4-接口当中的成员默认是public static final ，必须赋初值
//5-接口的方法不能有具体实现的方法，只能有抽象方法，接口当中的方法默认是public abstract
//6--接口当中的方法 不能有具体的实现 但是从jdk8开始，可以写一个default修饰的方法
//6-- 接口当中的方法 不写也是默认是public abstract
//7--接口当中不存在构造方法
//8-- 类和接口之间用implement关键字，类implement接口，类必须重写接口的方法
//9--接口当中可以有1static修饰的方法
//10== 接口可以多继承

//接口和抽象类的区别
//接口是对行为的规范，比抽象类更干脆，更纯粹

interface IShape {
    public static final String color = "haha";
    //只有常量命名时才是斜的
    public abstract void draw();
    default public void func() {
        System.out.println("jaja");
    }
    public static void staticFunc() {
        System.out.println("haha");
    }
}
class Heart implements IShape {

    @Override
    public void draw() {
        System.out.println("draw a ♥");
    }
}

class Flower implements IShape {

    @Override
    public void draw() {
        System.out.println("❀❀");
    }
}




//public class Test {
//
//    public static void main(String[] args) {
//
//    }
//
//    public static void draw() {
//        System.out.println("🧡🧡🧡🧡🧡🧡");
//    }
//    public static void main3(String[] args) {
//        draw();
//    }
//
//    public static void main2(String[] args) {
//        Dog dog = new Dog("阿七",13);
//        dog.eat();
//    }
//    public static void drawMap (Shape shape) {
//        shape.draw();
//    }
//
//    public static void main1(String[] args) {
//        Cycle cycle = new Cycle();
//        Heart heart = new Heart();
//        Flower flower = new Flower();
//        drawMap(cycle);
//        drawMap(heart);
//        drawMap(flower);
//    }
//}
